package com.xm.settlement.service.impl;


import com.xm.settlement.commons.utils.DigestUtils;
import com.xm.settlement.model.AppMsg;
import com.xm.settlement.service.AppMsgService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date;
import java.util.Random;

/*
 *
 *
 * 
 * 
 * username  用户名
 * password_md5   密码
 * mobile  手机号
 * apikey  apikey秘钥
 * content  短信内容
 * startTime  UNIX时间戳，不写为立刻发送，http://tool.chinaz.com/Tools/unixtime.aspx （UNIX时间戳网站）
 * 
 * success:msgid  提交成功。
error:msgid  提交失败  
error:Missing username  用户名为空
error:Missing password  密码为空
error:Missing apikey  APIKEY为空
error:Missing recipient  手机号码为空
error:Missing message content  短信内容为空
error:Account is blocked  帐号被禁用
error:Unrecognized encoding  编码未能识别
error:APIKEY or password_md5 error  APIKEY或密码错误
error:Unauthorized IP address  未授权 IP 地址
error:Account balance is insufficient  余额不足
 * */

/**
 * 乱码问题处理：
 * 1、GBK编码提交的
 首先urlencode短信内容（content），然后在API请求时，带入encode=gbk

 2、UTF-8编码的

 将content 做urlencode编码后，带入encode=utf8或utf-8
 http://m.5c.com.cn/api/send/index.php?username=XXX&password_md5=XXX&apikey=XXX&mobile=XXX&content=%E4%BD%A0%E5%A5%BD%E6%89%8D%E6%94%B6%E7%9B%8A%E9%9F%A6&encode=utf8

 示例
 *
 */

public class SendSMS {

    @Autowired
    private AppMsgService appMsgService;

    static String encode = "UTF-8";
    static String username = "zjqyzs";  //用户名
    static String password_md5 = DigestUtils.md5Hex("meilian123") ;  //密码
    static String apikey = "58ef7adb0e568669a36d55987a2bca25" ;  //apikey秘钥（请登录 http://m.5c.com.cn 短信平台-->账号管理-->我的信息 中复制apikey）

    private Logger logger  = LoggerFactory.getLogger(SendSMS.class);

    /**
     * 发送验证码
     * */
    public  boolean sendValidate(String content,String phone){
        //连接超时及读取超时设置
        System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); //连接超时：30秒
        System.setProperty("sun.net.client.defaultReadTimeout", "30000");	//读取超时：30秒
        //新建一个StringBuffer链接
        StringBuffer buffer = new StringBuffer();
        //zjqyzs username meilian123 password
        //String encode = "GBK"; //页面编码和短信内容编码为GBK。
        // 重要说明：如提交短信后收到乱码，请将GBK改为UTF-8测试。如本程序页面为编码格式为：ASCII/GB2312/GBK则该处为GBK。
        // 如本页面编码为UTF-8或需要支持繁体，阿拉伯文等Unicode，请将此处写为：UTF-8
        Random random = new Random();
        int validateCode = random.nextInt(899999);
        validateCode = validateCode + 100000;
        //6位短信验证码
          content = "您的验证码是："+validateCode+".10分钟内有效.【澳创】";  //要发送的短信内容，特别注意：签名必须设置，网页验证码应用需要加添加【图形识别码】。
        try {
            String contentUrlEncode = URLEncoder.encode(content,encode);  //对短信内容做Urlencode编码操作。注意：如
            //把发送链接存入buffer中，如连接超时，可能是您服务器不支持域名解析，请将下面连接中的：【m.5c.com.cn】修改为IP：【115.28.23.78】
            buffer.append("http://m.5c.com.cn/api/send/index.php?username="+username+"&password_md5="+password_md5+"&mobile="+phone+"&apikey="+apikey+"&content="+contentUrlEncode+"&encode="+encode);
            //System.out.println(buffer); //调试功能，输入完整的请求URL地址
            //把buffer链接存入新建的URL中
            URL url = new URL(buffer.toString());
            //打开URL链接
            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
            //使用POST方式发送
            connection.setRequestMethod("POST");
            //使用长链接方式
            connection.setRequestProperty("Connection", "Keep-Alive");
            //发送短信内容
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            //获取返回值
            String result = reader.readLine();
            String results[] = result.split(":");
            if (results[0].equals("success")) {
                AppMsg appMsg = new AppMsg();
                appMsg.setCreate_time(new Date());
                appMsg.setPhone(Long.valueOf(phone));
                appMsg.setMsg(validateCode);
                appMsgService.insert(appMsg);
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return  false;
        }
        return false;
    }

    /**
     * 发送纯短信内容
     * */
    public  boolean sendMessage(String content,String phone){
        //连接超时及读取超时设置
        System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); //连接超时：30秒
        System.setProperty("sun.net.client.defaultReadTimeout", "30000");	//读取超时：30秒
        //新建一个StringBuffer链接
        StringBuffer buffer = new StringBuffer();
        content = content+"【澳创】";  //要发送的短信内容，特别注意：签名必须设置，网页验证码应用需要加添加【图形识别码】。
        try {
            String contentUrlEncode = URLEncoder.encode(content,encode);  //对短信内容做Urlencode编码操作。注意：如
            buffer.append("http://m.5c.com.cn/api/send/index.php?username="+username+"&password_md5="+password_md5+"&mobile="+phone+"&apikey="+apikey+"&content="+contentUrlEncode+"&encode="+encode);
            URL url = new URL(buffer.toString());
            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Connection", "Keep-Alive");
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            String result = reader.readLine();
            String results[] = result.split(":");
            if (results[0].equals("success")) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return  false;
        }
        return false;
    }

    /**
     * 发送纯短信内容
     * */
    public  String sendAccount(String phone,String password){
        //连接超时及读取超时设置
        try {
            logger.info("------------------------------");
            logger.info("  开始发送短信 "+phone +":"+password);
            logger.info("------------------------------");
        System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); //连接超时：30秒
        System.setProperty("sun.net.client.defaultReadTimeout", "30000");	//读取超时：30秒
        //新建一个StringBuffer链接
            StringBuffer buffer = new StringBuffer();
            String content = "您的用户名是："+phone+",密码是:"+password+".请勿告知他人.【澳创】";  //要发送的短信内容，特别注意：签名必须设置，网页验证码应用需要加添加【图形识别码】。
            String contentUrlEncode = URLEncoder.encode(content,encode);  //对短信内容做Urlencode编码操作。注意：如
            buffer.append("http://m.5c.com.cn/api/send/index.php?username="+username+"&password_md5="+password_md5+"&mobile="+phone+"&apikey="+apikey+"&content="+contentUrlEncode+"&encode="+encode);
            URL url = new URL(buffer.toString());
            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Connection", "Keep-Alive");
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            String result = reader.readLine();
            String results[] = result.split(":");
            if (results[0].equals("success")) {
                return password;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return  null;
        }
        return null;
    }


}